﻿Imports AccesoDatos
Public Class MultiUsuario

#Region "Stephan"

    ''' <summary>
    ''' Realiza la busqueda de todos los empleados que poseen un salario variable
    ''' </summary>
    ''' <returns>Lista de usuarios</returns>
    ''' <remarks>Creador por: Stephan Endres, Fecha: 06/07/2010, Modificado: 06/07/2010.</remarks>
    Public Shared Function buscarUsuarioPorTipoVariable() As List(Of Usuario)
        Dim dr As IDataReader
        Dim objUsuario As Usuario = Nothing
        Dim listaUsuario As New List(Of Usuario)

        Dim sql As String

        sql = "select * from t_usuario as u join t_puesto as p on u.puesto = p.codigo where p.tipo_salario <> 1 and u.eliminado = 0"

        dr = g_access.ejecutarQuery(sql)

        While dr.Read()
            With dr
                objUsuario = cargarUsuario(dr)
                listaUsuario.Add(objUsuario)
            End With
        End While

        Return listaUsuario
    End Function

    ''' <summary>
    ''' Realiza la busqueda de aquellos usuarios que poseen un salario fijo
    ''' </summary>
    ''' <returns>Lista de ususarios</returns>
    ''' <remarks>Creador por: Stephan Endres, Fecha: 06/07/2010, Modificado: 06/07/2010.</remarks>
    Public Shared Function buscarUsuariosSalarioFijo() As List(Of Usuario)
        Dim dr As IDataReader
        Dim objUsuario As Usuario = Nothing
        Dim listaUsuario As New List(Of Usuario)

        Dim sql As String

        sql = "select * from t_usuario as u join t_puesto as p on u.puesto = p.codigo where p.tipo_salario = 1 and u.eliminado = 0"

        dr = g_access.ejecutarQuery(sql)

        While dr.Read()
            With dr
                objUsuario = cargarUsuario(dr)
                listaUsuario.Add(objUsuario)
            End With
        End While

        Return listaUsuario
    End Function

#End Region

#Region "Elías"

    ''' <summary>
    ''' Verifica si el usuario tiene el permiso indicado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_permiso">Código del permiso.</param>
    ''' <returns>Si el usuario tiene el permiso.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 27/04/2010, Modificado: 27/04/2010</remarks>
    Public Shared Function tienePermiso(ByVal p_identificacion As String, ByVal p_permiso As Integer) As Boolean
        Dim data As IDataReader
        Dim sql As String
        Dim pars(1) As Parametro
        Dim tiene As Boolean = False

        sql = "SELECT COUNT(*) AS tiene FROM t_permiso AS p " & _
            "INNER JOIN t_permiso_rol AS pr ON pr.id_permiso=p.id " & _
            "INNER JOIN t_rol AS r ON r.id=pr.id_rol INNER JOIN t_usuario AS u ON u.rol=r.id " & _
            "WHERE u.identificacion=p_identificacion AND p.id=p_permiso AND u.eliminado = 0"

        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_permiso", p_permiso)

        data = g_access.ejecutarQuery(sql, pars)

        If data.Read Then
            If data.Item("tiene") > 0 Then
                tiene = True
            End If
        End If

        Return tiene
    End Function

    ''' <summary>
    ''' Busca un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function buscar(ByVal p_identificacion As String) As Usuario
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario = Nothing

        sql = "SELECT * FROM t_usuario WHERE identificacion=p_identificacion AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            usuario = cargarUsuario(data)
        End While

        Return usuario
    End Function

    Public Shared Function buscar(ByVal p_identificacion As String, ByVal p_nombre As String) As List(Of Usuario)
        Dim sql As String
        Dim pars(1) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario
        Dim usuarios As New List(Of Usuario)

        sql = "SELECT * FROM t_usuario WHERE identificacion LIKE p_identificacion AND (nombre + ' ' + primer_apellido + ' ' + segundo_apellido) LIKE p_nombre AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", "%" & p_identificacion & "%")
        pars(1) = New Parametro("p_nombre", "%" & p_nombre & "%")

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            usuario = cargarUsuario(data)
            usuarios.Add(usuario)
        End While

        Return usuarios
    End Function

    ''' <summary>
    ''' Carga los datos obtenidos de la base de datos en un usuario.
    ''' </summary>
    ''' <param name="p_dr">Datos obtenidos de la base de datos.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 19/06/2010, Modificado: 19/06/2010</remarks>
    Private Shared Function cargarUsuario(ByVal p_dr As IDataReader) As Usuario
        Dim usuario As New Usuario

        ' Define los atributos del usuario.
        usuario.nombre = p_dr.Item("nombre")
        usuario.primerApellido = p_dr.Item("primer_apellido")
        usuario.segundoApellido = p_dr.Item("segundo_apellido")
        usuario.tipoIdentificacion = p_dr.Item("tipo_identificacion")
        usuario.identificacion = p_dr.Item("identificacion")
        usuario.fechaNacimiento = p_dr.Item("fecha_nacimiento")
        usuario.telefono = p_dr.Item("telefono")
        usuario.correo = p_dr.Item("correo_electronico")
        usuario.nombreUsuario = p_dr.Item("nombre_usuario")
        usuario.contrasenna = p_dr.Item("contrasenna")
        usuario.fechaIngreso = p_dr.Item("fecha_ingreso")
        usuario.estado = p_dr.Item("estado")
        usuario.vacaciones = p_dr.Item("vacaciones")
        usuario.estadoCurriculo = p_dr.Item("estado_curriculo")
        usuario.rol = p_dr.Item("rol")

        ' Pasa el género a String.
        If p_dr.Item("genero") Then
            usuario.genero = "Femenino"
        Else
            usuario.genero = "Masculino"
        End If

        ' En caso de tener un puesto asignarlo al usuario.
        If Not TypeOf p_dr.Item("puesto") Is DBNull Then
            usuario.puesto = MultiPuesto.obtener(p_dr.Item("puesto"))
        End If

        Return usuario
    End Function

#End Region

End Class
